package com.zch.news.dao.impl;

import java.util.ArrayList;
import java.util.List;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.zch.news.dao.UserDao;
import com.zch.news.entity.User;
import com.zch.news.util.CloseObject;
import com.zch.news.util.DBConnection;

/**
 * 
 * @ClassName: UserDaoImpl 
 * @Description: 用户接口的实现类
 * @author: zch
 * @version: 1.10
 * @date: 2018年8月28日 下午2:47:53
 */
public class UserDaoImpl implements UserDao {
	/**
	 * 获得一个用户信息
	 */
	@Override
	public User getUserByPhone(String phone) {
		//得到所有的用户信息
		List<User> list = getAllUser();
		//遍历集合，判断用户是否存在
		for(User user : list) {
			if(phone.equals(user.getPhone())) {
				return user;
			}
		}
			return null;
	}
	/**
	 * 获取所有用户信息
	 */
	@Override
	public List<User> getAllUser() {
		//存放从数据库中获取的所有用户信息
		List<User> list = new ArrayList<User>();
		Connection conn = DBConnection.getConnection();
		String sql = "select * from user_table2";
		//初始化PreparedStatement对象
		PreparedStatement ps = null;
		//初始化ResultSet对象
		ResultSet rs = null;
		try {
			ps = conn.prepareStatement(sql);
			//得到一个结果集
			rs = ps.executeQuery();
			//对结果集进行处理
			while(rs.next()) {//next()数组存在则返回true，否则返回false
				//实例化一个User对象
				User user = new User();
				user.setId(rs.getInt("id"));
				user.setPhone(rs.getString("phone"));
				user.setPassword(rs.getString("password"));
				user.setRole(rs.getInt("role"));
				//向集合中添加用户信息
				list.add(user);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			//关闭流对象
			CloseObject.close(conn, ps, rs);
		}
		return list;
	}

	/**
	 * 添加注册一个新用户
	 */
	@Override
	public boolean addUser(User user) {
		//获得数据库对象
		Connection conn = DBConnection.getConnection();
		String sql = "insert into user_table2(phone,password,role) values(?,?,?)";
		//初始化一个PreparedStatement对象
		PreparedStatement ps = null;
		//初始化数据库中被操作的数据行数
		int i = 0;
		try {
			ps = conn.prepareStatement(sql);
			//向数据库中添加信息
			ps.setString(1, user.getPhone());
			ps.setString(2, user.getPassword());
			ps.setInt(3, user.getRole());
			//数据库中被操作的数据行数b
			i = ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {	
			CloseObject.close(conn, ps);
		}
		if(i == 0) {
			return false;
		}else {
			return true;
		}
	}

	/**
	 * 修改用户密码
	 */
	@Override
	public boolean updateUser(User user) {
		//获得数据库连接对象
		Connection conn = DBConnection.getConnection();
		String sql = "update user_table2 set password=?where phone=?";
		PreparedStatement ps = null;
		int i =0;
		try {
			ps = conn.prepareStatement(sql);
			ps.setString(1, user.getPassword());
			ps.setString(2, user.getPhone());
			i = ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			//关闭流对象
			CloseObject.close(conn, ps);
		}
		if(i == 0) {
			return false;
		}else {
			return true;
		}	
	}
	
}
